var searchData = [
{
  "filename": "ABOUT/index.html",
  "title": "ABOUT",
  "text": " The eXtended Calibration File format is more than just a data file it is a complete description of your microphone purchased from iSEMcon. It gives you the capability to get the best performance setup from your iSEMcon measurement mic with respect to your measurement setup and measurememnt environment. Just convert the XCF file to the calibration file and contents of your preference and measurement situation. "
},
{
  "filename": "TheXCF_file_format/index.html",
  "title": "TheXCF file format",
  "text": "TheXCF file format The XCF-File not only contains mic frequency response data but also contains mic manufacturing, facility and other calibration data. The XCF file is your mic description. [HEAD];; VERSION;I13A; CHECK;6H25; [DEV];; MICname;EMX-7150; MICman;iSEMcon GmbH; MICser;4081301; MICpow;Phantom 48V/6,8kOhm; [CAPSULE];; CAPname;MK204; CAPman;BSWA; CAPtype;Freefield; CAPser;1231623; CAPmV;50; CAPdir;Omnidiectional; CAPpol;Prepolarized (0V); CAPMICclass;2; [CALIBRATION];; CALfac;iSEMcon GmbH; CALgps;8.591570 49.545144; CALper;Frank; CALdate;16-03-15; CALtemp;22.5; CALhum;37; CALmbar;1013; CALfreq;1000; CALspl;94; CALpow;Phantom 48V/6.8k; MICmV;7.33; [FRD];; 10.00;-0.83;17.72 11.20;-0.48;18.41 12.50;-0.35;17.23 14.00;-0.20;15.44 \u0026hellip;\u0026hellip;.. 14000.00;1.61;7.10 16000.00;1.64;6.36 18000.00;1.79;5.64 20000.00;1.91;4.65 "
},
{
  "filename": "Program_STRT_and_sequence/index.html",
  "title": "Program STRT and sequence",
  "text": " Program Start Start the program iSEMconXCF from the windows explorer window The program start windows will show up right away. Now we guide you through the converter settings and procedures step by step. "
},
{
  "filename": "Program_STRT_and_sequence/STEP_by_STEP/index.html",
  "title": "STEP by STEP",
  "text": "Using the software STEP by STEP STEP 1: Click on loadXCF first. A file selection window will open. You can select your xcf source file from here. After the input file selection is made, the file will be checked for data consistancy. In case of a corrupt file the program will be terminated with a checksum error. STEP 2: Click on dest Cal file. A sub window will open. Specify the filename to save your data. STEP 3: Choose a file format for your destination file or use default and set your parameters manually. In case your software is not listed we recommend to use FRD which stands for frequency response data or default. You can control the settings in the section above. You can use one of the standard settings e.g. SMAART, FRD or to get access to all individual options select default/custom from the pull down menu. You can setup for your individual calibration file format using the field delimiter and decimal separator setting together with the option to add a first line MICinfo to the destination calibration file with its own separator. \u0026hellip; and if you want to add Phase information derived from the iSEMcon calibarion system in comparison to the calibration reference microphone. Selections here are add phase, remove phase or zero phase. zero phase means adding 0,00 values as phase information and not leaving the 3 column blank. STEP 4: Next settings to make can be made in the Calibration Correction subfolder. Here you setup for the sound field, the windscreen addition and the mic powering which effects the low frequency roll-off due to input impedance and mic power. You can select between Freefield and Diffusefield and OPS35-build in microphone response. OPS35 is the iSEMcon outdoor protection system that holds one microphone and protects the mic from severe wheather conditions. The diffusefield response is derived from the freefield response as per B\u0026K literature (approxiamted by 90 deg mic response). Followed by the Protector(windscreen) option, WS-12 here, and the Phantom power used or better say the microphone is supplied from. After you have done all your settings you can convert the input XCF-file to the destination calibration file. STEP 5: Click Convert. Whenever you click convert the outfile is overwritten with the actual cal file setting. If you want to convert data and save them to a new outfilr you hav to go back to dest CAL file first (2). The program window will switch to \u201CFileview\u201D . You can scroll through the input and written output data now to check if the format fits your needs. The XCF file holds individual microphone information from manufacturing and calibration process. Those data can be seen in Mic ident folder Additional information about the mic caosule used can be found in the last folder micCAPSULE. Draft: March 12th. 2025 "
},
{
  "filename": "Example/index.html",
  "title": "Example",
  "text": "Example Start the program iSEMconXCF. Load XF\u0026acute;XF File (1), CPX1212-122301-031123-XCF.xcf here Source file will be checked. Setup for destination file. Type in test.frd We recommend to give it a unique filename right here or after convertion. e.g. CPX1212-123456-OPS35.frd intead of just test.frd. This makes it easieer for later identification from just the filename. from the main program screen make the selections as follows. Select CalFile Format to get access to all setup items. Assuming we want a cal file in the following format: Frequncy response data with no phase data, Semicolon as the fiels delimiter and dot as decimal delimiter and we want a calibration file headline seperated by an asterix \u0027*\u0027 . open the next folder for further setup items. here you can see the initial settings. Make the following changes. while choosing OPS35 the protector windscreen willbe shadowed out. ... and setup for P48 6k8 Rin 2k4 assuming this represents your mic interface or preamplifier phantom power specs. OK settings or done! go back to the CalFileFolder and click Convert. The FileView Foldeer will shop up and you can see the result of your new calibration file generated. If this is not the file you really wanted, change your settings like before but different ;-) and click convert again. the Destination file will be overwritten. In cas you want to give it a new name due to different format, please chanhe the destination file name before after a dest C\u003EAL file button click. OK, lets open the test.frd (your cal file generated here to see what\u0027s what. See the headline containg all setup information. Serial numbers are not written here this is why we suggested to type it in the filename. This makes it easy to identify a cal file and search for it using e.g. windows explorer. That\u0027s it! "
},
{
  "filename": "Support_-_Feedback_-_Suggestions/index.html",
  "title": "Support - Feedback - Suggestions",
  "text": "Support / Feedback / Suggestions Please contact us support (at) iSEMcon.com Feel free to use our calibration file converter. If you find errors or have any suggestions or wnat to give us a feedback, just send us an email. "
},
];

function getRelativePath(relativePath) {
    var element = document.getElementById('search');
    var searchPath = element.dataset.searchpath;
    var absolutePath = searchPath + relativePath;
    return absolutePath;
}
// Get the search field and results div
var searchField = document.getElementById('search');
var resultsDiv = document.getElementById('searchResults');

// Add event listener to the search field
searchField.addEventListener('keyup', function () {
    // Get search term and make it lowercase
    var searchTerm = searchField.value.toLowerCase();

    // Split the search term into words and filter out empty strings and single characters
    var searchWords = searchTerm.split(',').filter(function (word) {
        return word.length > 2;
    });

    // Clear the results div
    resultsDiv.innerHTML = '';

    // Create a new button element
    var closeButton = document.createElement('button');
    // Change the button text to 'x'
    closeButton.innerHTML = 'x';

    // Add a class to the button for styling (optional)
    closeButton.className = 'close-button';

    // Add an event listener to the button to handle the click event
    closeButton.addEventListener('click', function () {
        // Clear the div's content when the button is clicked
        resultsDiv.innerHTML = '';
        resultsDiv.style.display = 'none';
    });

    // If the search term is empty or only whitespace, stop here
    if (!searchTerm.trim()) {
        resultsDiv.style.display = 'none';
        return;
    }

    // Filter the data
    var results = searchData.filter(file => {
        // Check if all words appear in the title or text
        return searchWords.every(word =>
            file.title.toLowerCase().includes(word) ||
            file.text.toLowerCase().includes(word)
        );
    });

    // Create an unordered list
    var resultList = document.createElement('ul');

    // Add each result to the results list
    results.forEach(result => {
        // Create a list item and a link for each result
        var resultItem = document.createElement('li');
        var resultLink = document.createElement('a');
        resultLink.textContent = result.title;
        resultLink.href = getRelativePath(result.filename);

        // Add the link to the list item
        resultItem.appendChild(resultLink);

        // Highlight all occurrences of the search terms in the text, without requiring full word matches
        var fullText = result.text;
        var snippets = [];

        // Function to find and process all occurrences of the search terms
        searchWords.forEach(word => {
            var re = new RegExp(`(\\S*\\s)?(\\S*\\s)?(\\S*\\s)?(\\S*\\s)?(\\S*\\s)?${word}(\\s\\S*)?(\\s\\S*)?(\\s\\S*)?(\\s\\S*)?(\\s\\S*)?`, 'gi');
            fullText = fullText.replace(re, function (match, ...groups) {
                var snippet = match;
                var prefix = groups.slice(0, 5).join('');
                var suffix = groups.slice(5, 10).join('');
                var matchIndex = match.toLowerCase().indexOf(word.toLowerCase());
                var startIndex = Math.max(fullText.indexOf(match) - prefix.length, 0);
                var endIndex = fullText.indexOf(match) + matchIndex + word.length + suffix.length;

                // Check if the start and end of the snippet are not the start or end of the full text
                var prefixEllipsis = startIndex > 0 ? "..." : "";
                var suffixEllipsis = endIndex < fullText.length ? "..." : "";

                snippet = prefixEllipsis + prefix + '<mark>' + match.substr(matchIndex, word.length) + '</mark>' + suffix + suffixEllipsis;

                // Avoid duplicate snippets
                if (!snippets.includes(snippet)) {
                    snippets.push(snippet);
                }

                // Return the original match with the search term highlighted, not altering the surrounding text
                return match.substr(0, matchIndex) + '<mark>' + match.substr(matchIndex, word.length) + '</mark>' + match.substr(matchIndex + word.length);
            });
        });

        // Combine all unique snippets into the highlightedText
        var highlightedText = snippets.join(' ');

        // Create a paragraph for the context and add it to the list item
        var contextParagraph = document.createElement('p');
        contextParagraph.innerHTML = highlightedText;
        resultItem.appendChild(contextParagraph);

        // Add the list item to the list
        resultList.appendChild(resultItem);
    });

    // Add the results list to the results div
    resultsDiv.appendChild(resultList);

    // Append the button to the div
    resultsDiv.appendChild(closeButton);

    // If there are no results, hide the results div and stop here
    if (results.length === 0) {
        resultsDiv.style.display = 'none';
        return;
    }

    // Show the results div
    resultsDiv.style.display = 'block';
});